<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  
  <title>Hexo</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="1引入需要的模块import pygameimport timeimport random 1配置图片地址IMAGE_PATH &#x3D; ‘D:&#x2F;死亡笔记&#x2F;开发代码&#x2F;自制游戏&#x2F;植物大战僵尸&#x2F;resources&#x2F;graphics&#x2F;‘ 1设置页面宽高scrrr_width&#x3D;1000scrrr_height &#x3D;600 1创建控制游戏结束的状态GAMEOVER &#x3D; False 2 创建关数，剩余分数，钱数sha">
<meta property="og:type" content="article">
<meta property="og:title" content="Hexo">
<meta property="og:url" content="https://goofyer.gitee.io/notes-on-computer-expertise/2022/03/14/%E5%B0%8F%E9%A1%B9%E7%9B%AE%E6%A8%A1%E6%9D%BF/pvz/%E6%A4%8D%E7%89%A9%E5%A4%A7%E6%88%98%E5%83%B5%E5%B0%B8/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="1引入需要的模块import pygameimport timeimport random 1配置图片地址IMAGE_PATH &#x3D; ‘D:&#x2F;死亡笔记&#x2F;开发代码&#x2F;自制游戏&#x2F;植物大战僵尸&#x2F;resources&#x2F;graphics&#x2F;‘ 1设置页面宽高scrrr_width&#x3D;1000scrrr_height &#x3D;600 1创建控制游戏结束的状态GAMEOVER &#x3D; False 2 创建关数，剩余分数，钱数sha">
<meta property="og:locale" content="en_US">
<meta property="article:published_time" content="2022-03-14T12:32:30.314Z">
<meta property="article:modified_time" content="2022-03-14T12:36:42.685Z">
<meta property="article:author" content="John Doe">
<meta name="twitter:card" content="summary">
  
    <link rel="alternate" href="/notes-on-computer-expertise/atom.xml" title="Hexo" type="application/atom+xml">
  
  
    <link rel="shortcut icon" href="/notes-on-computer-expertise/favicon.png">
  
  
    
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/typeface-source-code-pro@0.0.71/index.min.css">

  
  
<link rel="stylesheet" href="/notes-on-computer-expertise/css/style.css">

  
    
<link rel="stylesheet" href="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.css">

  
<meta name="generator" content="Hexo 5.4.0"></head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/notes-on-computer-expertise/" id="logo">Hexo</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/">Home</a>
        
          <a class="main-nav-link" href="/notes-on-computer-expertise/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/notes-on-computer-expertise/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="https://goofyer.gitee.io/notes-on-computer-expertise"></form>
      </div>
    </div>
  </div>
</header>

      <div class="outer">
        <section id="main"><article id="post-小项目模板/pvz/植物大战僵尸" class="h-entry article article-type-post" itemprop="blogPost" itemscope itemtype="https://schema.org/BlogPosting">
  <div class="article-meta">
    <a href="/notes-on-computer-expertise/2022/03/14/%E5%B0%8F%E9%A1%B9%E7%9B%AE%E6%A8%A1%E6%9D%BF/pvz/%E6%A4%8D%E7%89%A9%E5%A4%A7%E6%88%98%E5%83%B5%E5%B0%B8/" class="article-date">
  <time class="dt-published" datetime="2022-03-14T12:32:30.314Z" itemprop="datePublished">2022-03-14</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
    <div class="e-content article-entry" itemprop="articleBody">
      
        <h1 id="1引入需要的模块"><a href="#1引入需要的模块" class="headerlink" title="1引入需要的模块"></a>1引入需要的模块</h1><p>import pygame<br>import time<br>import random</p>
<h1 id="1配置图片地址"><a href="#1配置图片地址" class="headerlink" title="1配置图片地址"></a>1配置图片地址</h1><p>IMAGE_PATH = ‘D:/死亡笔记/开发代码/自制游戏/植物大战僵尸/resources/graphics/‘</p>
<h1 id="1设置页面宽高"><a href="#1设置页面宽高" class="headerlink" title="1设置页面宽高"></a>1设置页面宽高</h1><p>scrrr_width=1000<br>scrrr_height =600</p>
<h1 id="1创建控制游戏结束的状态"><a href="#1创建控制游戏结束的状态" class="headerlink" title="1创建控制游戏结束的状态"></a>1创建控制游戏结束的状态</h1><p>GAMEOVER = False</p>
<h1 id="2-创建关数，剩余分数，钱数"><a href="#2-创建关数，剩余分数，钱数" class="headerlink" title="2 创建关数，剩余分数，钱数"></a>2 创建关数，剩余分数，钱数</h1><p>shaoguan = 1<br>remnant_score = 100</p>
<h1 id="3-创建地图类，初始化地图和坐标"><a href="#3-创建地图类，初始化地图和坐标" class="headerlink" title="3.创建地图类，初始化地图和坐标"></a>3.创建地图类，初始化地图和坐标</h1><h1 id="3-创建地图类"><a href="#3-创建地图类" class="headerlink" title="3 创建地图类"></a>3 创建地图类</h1><p>class Map():</p>
<pre><code>#3 初始化地图
def __init__(self, x, y,map_path):
    self.position = [x, y]
    # 是否能够种植
    self.can_grow = True    
    self.image = pygame.image.load(map_path)
    #3 存储所有地图坐标点
    self.map_points_list = []
    #3 存储所有的地图块
    self.map_list = []

    #3 加载地图
def load_map(self,mainGame):
    mainGame.blit(self.image,self.position)
    if self.position[0]&gt;-200:
        self.position[0]-=10
</code></pre><p>​<br>​        #3 初始化坐标点<br>​    def init_plant_points(self, mainGame):<br>​        for y in range(1, 7):<br>​            points = []<br>​            for x in range(10):<br>​                point = [x<em>80+50, y</em>90+10]<br>​                pygame.draw.rect(mainGame,[0,0,0],[point[0],point[1],10,10],1)<br>​                points.append(point)<br>​            self.map_points_list.append(points)<br>​            #print(“MainGame.map_points_list”, self.map_points_list)</p>
<h1 id="4-创建植物类"><a href="#4-创建植物类" class="headerlink" title="4 创建植物类"></a>4 创建植物类</h1><p>class Plant(pygame.sprite.Sprite):<br>​    def <strong>init</strong>(self):<br>​        super(Plant, self).<strong>init</strong>()<br>​        self.live=True<br>​        self.num=0<br>​        self.image=[]<br>​    # 加载图片<br>​    def load_image(self,mainGame):<br>​        if self.live==True:<br>​            mainGame.window.blit(self.image[self.num],0,0)<br>​            self.num+=1<br>​            if self.num&gt;=len(self.image):<br>​                self.num=0<br>​            </p>
<h1 id="5-向日葵类"><a href="#5-向日葵类" class="headerlink" title="5 向日葵类"></a>5 向日葵类</h1><p>class Sunflower(Plant):<br>​    def <strong>init</strong>(self,x,y):<br>​        super(Sunflower, self).<strong>init</strong>()<br>​        for i in range(1,18):<br>​            self.image.append(pygame.image.load(IMAGE_PATH+’Plants/SunFlower/SunFlower_’+str(i)+’.png’))<br>​        self.rect = self.image[0].get_rect()<br>​        self.x = x<br>​        self.y = y<br>​        self.price = 50<br>​        self.hp = 100<br>​        #5 时间计数器<br>​        self.time_count = 0<br>​    # 加载图片<br>​    def load_image(self,mainGame):<br>​        if self.live==True:<br>​            self.produce_sun_number(mainGame)<br>​            mainGame.window.blit(self.image[self.num],(self.x,self.y))<br>​            self.num+=1<br>​            if self.num&gt;=len(self.image):<br>​                self.num=0<br>​    #5 功能：生成阳光<br>​    def produce_sun_number(self,mainGame):<br>​        self.time_count += 1<br>​        if self.time_count == 200:<br>​            mainGame.sun_number += 25<br>​            self.time_count = 0</p>
<h1 id="6-豌豆射手类"><a href="#6-豌豆射手类" class="headerlink" title="6 豌豆射手类"></a>6 豌豆射手类</h1><p>class PeaShooter(Plant):<br>    def <strong>init</strong>(self,x,y):<br>        super(PeaShooter, self).<strong>init</strong>()<br>        for i in range(13):<br>            self.image.append(pygame.image.load(IMAGE_PATH+’Plants/Peashooter/Peashooter_’+str(i)+’.png’))<br>        self.rect = self.image[0].get_rect()<br>        self.x = x<br>        self.y = y<br>        self.price = 50<br>        self.hp = 100</p>
<pre><code>    #6 发射计数器
    self.shot_count = 0
# 加载图片
def load_image(self,mainGame):
    if self.live==True:
        self.shot(mainGame)
        mainGame.window.blit(self.image[self.num],(self.x,self.y))
        self.num+=1
        if self.num&gt;=len(self.image):
            self.num=0

#6 增加射击方法
def shot(self,mainGame):
    #6 记录是否应该射击
    should_fire = True
    for zombie in mainGame.zombie_list:
        if zombie.rect.y == self.rect.y and zombie.rect.x &lt; 800 and zombie.rect.x &gt; self.rect.x:
            should_fire = True
    #6 如果活着
    if self.live and should_fire:
        self.shot_count += 1
        # 计数器到25发射一次
        if self.shot_count == 25: 
            peabullet = PeaBullet(self)
            #6 将子弹存储到子弹列表中
            mainGame.peabullet_list.append(peabullet)
            self.shot_count = 0
</code></pre><h1 id="7-豌豆子弹类"><a href="#7-豌豆子弹类" class="headerlink" title="7 豌豆子弹类"></a>7 豌豆子弹类</h1><p>class PeaBullet(pygame.sprite.Sprite):<br>    def <strong>init</strong>(self,peashooter):<br>        self.live = True<br>        self.image = pygame.image.load(IMAGE_PATH+’Bullets/PeaNormal/PeaNormal_0.png’)<br>        self.damage = 50<br>        self.speed  = 10<br>        self.rect = self.image.get_rect()<br>        self.x = peashooter.x + 35<br>        self.y = peashooter.y + 5</p>
<pre><code>def move_bullet(self):
    #7 在屏幕范围内，实现往右移动
    if self.x &lt; scrrr_width:
        self.x += self.speed
    else:
        self.live = False
def load_image(self,mainGame):
    mainGame.window.blit(self.image,(self.x,self.y))            
</code></pre><h1 id="1主程序"><a href="#1主程序" class="headerlink" title="1主程序"></a>1主程序</h1><p>class MainGame():<br>    def  <strong>init</strong>(self,map_path):<br>        self.poss=(0,0)</p>
<pre><code>    #1初始化窗口
    self.init_window(map_path)
    self.map_class =  Map(0,0,map_path)
    self.current_times=1
    self.sun_number=100
    self.check_id=-1
    #4 存储所有植物的列表
    self.plants_list = []
    #4 存储所有植物lan的列表
    self.ChooserBackground=pygame.image.load(IMAGE_PATH+&quot;Screen/ChooserBackground.png&quot;)
    self.plants_lan_list = [
        pygame.transform.scale(pygame.image.load(IMAGE_PATH+&quot;Cards/card_sunflower.png&quot;),(50, 70)),
        pygame.transform.scale(pygame.image.load(IMAGE_PATH+&quot;Cards/card_peashooter.png&quot;),(50, 70))]
    self.plants_lan_move_list = [
        pygame.transform.scale(pygame.image.load(IMAGE_PATH+&quot;Cards/card_sunflower_move.png&quot;),(50, 70)),
        pygame.transform.scale(pygame.image.load(IMAGE_PATH+&quot;Cards/card_peashooter_move.png&quot;),(50, 70))]
    #4 存储所有僵尸的列表
    self.zombie_list=[]
    self.peabullet_list=[]

 #1加载游戏窗口
def init_window(self,map_path):
    #1调用显示模块的初始化
    pygame.display.init()
    #1创建窗口
    self.window = pygame.display.set_mode([scrrr_width,scrrr_height])  #
#1开始游戏
def start_game(self):
    #1只要游戏没结束，就一直循环
    while not GAMEOVER:
        #1渲染白色背景
        self.window.fill((255, 255, 255))
        self.map_class.load_map(self.window)

        if self.map_class.position[0]&lt;=-200:
            #按键区块
            self.deal_events()
            #逻辑区块
            for i in range(len(self.peabullet_list)):
                self.peabullet_list[i].move_bullet()
            #渲染区块
            self.load_plant_column()
            self.window.blit(self.draw_text(str(self.sun_number), 15, (0,0,0)), (60, 63))
            self.map_class.init_plant_points(self.window)
            if self.check_id!=-1:
                self.window.blit(self.plants_lan_move_list[self.check_id],[self.poss[0]-30,self.poss[1]-35])
            for i in range(len(self.plants_list)-1,-1,-1):
                if self.plants_list[i].live == False:
                    del self.plants_list[i]
                    continue
                self.plants_list[i].load_image(self)
            for i in range(len(self.peabullet_list)-1,-1,-1):

                if self.peabullet_list[i].live == False:
                    print(i)
                    del self.peabullet_list[i]
                    continue
                self.peabullet_list[i].load_image(self)

        #1实时更新
        pygame.display.update()

        self.current_times=self.current_times+1
        if self.current_times%250==0:
            self.sun_number=self.sun_number+25
        time.sleep(0.05)
#2.文本绘制，创建要动态改变的属性，渲染的位置
#2 文本绘制
def draw_text(self, content, size, color):
    pygame.font.init()
    font = pygame.font.SysFont(&#39;kaiti&#39;, size)
    text = font.render(content, True, color)
    return text
def load_plant_column(self):
    self.window.blit(self.ChooserBackground,[30,0])
    wid=55
    for i in range(len(self.plants_lan_list)):
        self.window.blit(self.plants_lan_list[i],[110+wid*i,10])
#2 加载帮助提示
def load_help_text(self):
    text1 = self.draw_text(&#39;1.按左键创建向日葵 2.按右键创建豌豆射手&#39;, 26, (255, 0, 0))
    self.window.blit(text1, (50, 70))
    #2 渲染的文字和坐标位置
    self.window.blit(self.draw_text(&#39;当前钱数$: &#123;&#125;&#39;.format(self.sun_number), 26, (255, 0, 0)), (200,60))
#6 加载植物处理
def load_plants(self):
    for plant in self.plants_list:
        #6 优化加载植物的处理逻辑
        if plant.live:
            if isinstance(plant, Sunflower):
                plant.load_image(self)
                plant.produce_sun_number(self)
            elif isinstance(plant, PeaShooter):
                plant.load_image(self)
                plant.shot(self)
        else:
            self.plants_list.remove(plant)
#8事件处理
def deal_events(self):
    #8 获取所有事件
    eventList = pygame.event.get()
    #8 遍历事件列表，判断
    for e in eventList:
        if e.type == pygame.QUIT:
            exit()
        elif e.type == pygame.MOUSEBUTTONDOWN:
            # print(&#39;按下鼠标按键&#39;)
            if e.pos[1]&gt;10 and e.pos[1]&lt;80:
                if e.pos[0]&gt;110 and e.pos[0]&lt;110+55*(len(self.plants_lan_list)):
                    self.check_id=int((e.pos[0]-110)/55)
                    self.poss=e.pos
                else:
                    self.check_id=-1
            elif e.pos[1]&gt;100 and e.pos[1]&lt;550 and self.check_id!=-1:
                if e.pos[0]&gt;50 and e.pos[0]&lt;770:
                    if self.check_id==0 and self.sun_number&gt;=50:
                        self.sun_number-=15
                        self.plants_list.append(Sunflower((((int)((e.pos[0]-50)/80))*80+50),((int)(((e.pos[1]-100)/90))*90)+100))
                    elif self.check_id==1and self.sun_number&gt;=100:
                        self.sun_number-=100
                        self.plants_list.append(PeaShooter((((int)((e.pos[0]-50)/80))*80+50),((int)(((e.pos[1]-100)/90))*90)+100))
                    self.check_id=-1
                else:
                    self.check_id=-1
            else:
                self.check_id=-1

        elif e.type == pygame.MOUSEMOTION:
            if self.check_id!=-1:
                self.poss=e.pos
        # print(e.button)#左键1  按下滚轮2 上转滚轮为4 下转滚轮为5  右键 3
        &#39;&#39;&#39;
        x = e.pos[0] // 80
        y = e.pos[1] // 80
        print(x, y)
        map = MainGame.map_list[y - 1][x]
        print(map.position)
        #8 增加创建时候的地图装填判断以及金钱判断
        if e.button == 1:
            if map.can_grow and MainGame.money &gt;= 50:
                sunflower = Sunflower(map.position[0], map.position[1])
                MainGame.plants_list.append(sunflower)
                print(&#39;当前植物列表长度:&#123;&#125;&#39;.format(len(MainGame.plants_list)))
                map.can_grow = False
                MainGame.money -= 50
        elif e.button == 3:
            if map.can_grow and MainGame.money &gt;= 50:
                peashooter = PeaShooter(map.position[0], map.position[1])
                MainGame.plants_list.append(peashooter)
                print(&#39;当前植物列表长度:&#123;&#125;&#39;.format(len(MainGame.plants_list)))
                map.can_grow = False
                MainGame.money -= 50

                #8 调用事件处理的方法
                self.deal_events()&#39;&#39;&#39;
</code></pre><h1 id="1启动主程序"><a href="#1启动主程序" class="headerlink" title="1启动主程序"></a>1启动主程序</h1><p>if <strong>name</strong> == ‘<strong>main</strong>‘:<br>​    game = MainGame(IMAGE_PATH+”/Items/Background/Background_0.jpg”)<br>​    game.start_game()</p>
<p>植物可以自动设子弹以后 下一步 开始创建僵尸类</p>

      
    </div>
    <footer class="article-footer">
      <a data-url="https://goofyer.gitee.io/notes-on-computer-expertise/2022/03/14/%E5%B0%8F%E9%A1%B9%E7%9B%AE%E6%A8%A1%E6%9D%BF/pvz/%E6%A4%8D%E7%89%A9%E5%A4%A7%E6%88%98%E5%83%B5%E5%B0%B8/" data-id="cl403sxsq0053f8vuctmm9qpe" data-title="" class="article-share-link">Share</a>
      
      
      
    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/notes-on-computer-expertise/2022/03/23/%E4%BB%A3%E7%A0%81%E5%AE%9E%E6%88%98/%E4%B8%AD%E5%9B%BD%E8%B1%A1%E6%A3%8Bunity/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          (no title)
        
      </div>
    </a>
  
  
    <a href="/notes-on-computer-expertise/2022/03/10/%E4%BB%A3%E7%A0%81%E5%AE%9E%E6%88%98/%E5%9B%9B%E5%9B%BD%E8%B1%A1%E6%A3%8Bai/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title"></div>
    </a>
  
</nav>

  
</article>


</section>
        
          <aside id="sidebar">
  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Categories</h3>
    <div class="widget">
      <ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C#工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/C-%E5%B7%A5%E5%85%B7/">C++工具</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/Mysql/">Mysql</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/blender/">blender</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/linux/">linux</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/manim/">manim</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/spring/">spring</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C/">vba基础操作</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E5%88%9B%E9%80%A0%E6%A8%A1%E5%BC%8F/">创造模式</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/">操作系统</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">操作系统基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%BC%80%E5%8F%91/">操作系统开发</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E5%AD%A6/">数学</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/">数据结构</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86/">数据结构基础知识</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%A8%A1%E6%9D%BF/">模板</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/">深度学习</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%8B%B1%E8%AF%AD/">英语</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%99%9A%E5%B9%BB4/">虚幻4</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86/">计算机组成原理</a></li><li class="category-list-item"><a class="category-list-link" href="/notes-on-computer-expertise/categories/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/">计算机网络</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/notes-on-computer-expertise/tags/C/" rel="tag">C++</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/notes-on-computer-expertise/tags/C/" style="font-size: 10px;">C++</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/05/">May 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/03/">March 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/02/">February 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2022/01/">January 2022</a></li><li class="archive-list-item"><a class="archive-list-link" href="/notes-on-computer-expertise/archives/2021/12/">December 2021</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/31/vue/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6%E9%AA%8C%E8%AF%81%E7%A0%81%E6%97%A0%E6%B3%95%E6%98%BE%E7%A4%BA/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/26/%E6%95%B0%E6%8D%AE%E5%BA%93/navicat%E5%AE%89%E8%A3%85/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/25/%E8%99%9A%E5%B9%BB4%E5%BC%95%E6%93%8E%E5%BC%80%E5%8F%91/%E8%99%9A%E5%B9%BB%E5%9B%9B%20mod%E5%88%B6%E4%BD%9C/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/python/python%E6%89%B9%E9%87%8F%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE/">(no title)</a>
          </li>
        
          <li>
            <a href="/notes-on-computer-expertise/2022/05/23/vba%E5%9F%BA%E7%A1%80%E6%93%8D%E4%BD%9C%E7%AC%94%E8%AE%B0/EXCEL%E5%9F%BA%E7%A1%80%E6%95%99%E7%A8%8B/">(no title)</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      
      &copy; 2022 John Doe<br>
      Powered by <a href="https://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

    </div>
    <nav id="mobile-nav">
  
    <a href="/notes-on-computer-expertise/" class="mobile-nav-link">Home</a>
  
    <a href="/notes-on-computer-expertise/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    


<script src="/notes-on-computer-expertise/js/jquery-3.4.1.min.js"></script>



  
<script src="/notes-on-computer-expertise/fancybox/jquery.fancybox.min.js"></script>




<script src="/notes-on-computer-expertise/js/script.js"></script>





  </div>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {
            inlineMath: [ ["$","$"], ["\\(","\\)"] ],
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code'],
            processEscapes: true
        }
    });
    MathJax.Hub.Queue(function() {
        var all = MathJax.Hub.getAllJax();
        for (var i = 0; i < all.length; ++i)
            all[i].SourceElement().parentNode.className += ' has-jax';
    });
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
</body>
</html>